package converter;

import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;

/**
 * Erweitert die Produktklasse um Tontreager-spezifische Datenelemente wie das Label oder die Interpreten.
 *
 * @author Patrick Bauer
 */
public class AudioElement extends XMLElement {
    /**
     * Liste der Interpreten
     */
    private ArrayList<String> interpret = new ArrayList<String>();

    /**
     * Art des Tontraegers
     */
    private String tontraeger_art = "";

    /**
     * Anzahl der Tontraeger
     */
    private String tontraeger_anzahl = "";

    /**
     * Label des Tontraegers
     */
    private String label = "";

    /**
     * Setzt die Art
     *
     * @param tontraeger die Tontraegerart
     */
    public void setTontraeger(String tontraeger) {
        this.tontraeger_art = tontraeger;
    }

    /**
     * Setzt die Anzahl
     *
     * @param tontraeger_anzahl die Anzahl der Tontraeger
     */
    public void setTontraeger_anzahl(String tontraeger_anzahl) {
        this.tontraeger_anzahl = tontraeger_anzahl;
    }

    /**
     * Fuegt einen Interpreten hinzu
     *
     * @param interpret ein Interpret
     */
    public void setInterpret(String interpret) {
        this.interpret.add(interpret);
    }

    /**
     * Setzt das Label
     *
     * @param label das Label
     */
    public void setLabel(String label) {
        this.label = label;
    }

    /**
     * Erweitert die Anzahl der unbekannten allgemeinen Datenelemente um unbekannte <br>
     * Tontraeger-spezifische Datenelemente.
     *
     * @return die Anzahl aller unbekannten Datenelemente
     */
    @Override
    public int countUnknown(){
        int i = super.countUnknown();
        
        if(this.label.isEmpty()) {
            i++;
        }
        
        if(this.interpret.isEmpty()) {
            i++;
        }
        
        return i;
    }
    
    /**
     * Schreibt das eigene Tontraeger-Produkt Objekt in valider Form in die uebergebene XML Datei.
     *
     * @param writer das Writer Objekt
     * @throws IOException wird geworfen bei Fehlern waehrend des Dateizugriffs
     */
    @Override
    public void write(FileWriter writer) throws IOException {
        writer.write("\t\t\t<Tontraeger>" + System.getProperty("line.separator"));
        
        //title
        if(this.title.isEmpty()) {
            writer.write("\t\t\t\t<Titel unbekannt=\"1\"></Titel>" + System.getProperty("line.separator"));  
        } else {
            writer.write("\t\t\t\t<Titel unbekannt=\"0\">" + title.get(0).toString() + "</Titel>" + System.getProperty("line.separator"));
        }
        
        //verlag
        if(this.label.isEmpty()) {
            writer.write("\t\t\t\t<Label unbekannt=\"1\"></Label>" + System.getProperty("line.separator"));  
        } else {
            writer.write("\t\t\t\t<Label unbekannt=\"0\">" + this.label + "</Label>" + System.getProperty("line.separator"));
        }
        
        //autor
        if(this.interpret.isEmpty()) {
            writer.write("\t\t\t\t<Interpret unbekannt=\"1\"></Interpret>" + System.getProperty("line.separator"));  
        } else {
            for(Object interpretItem : this.interpret.toArray()) {
                writer.write("\t\t\t\t<Interpret unbekannt=\"0\">" + interpretItem.toString() + "</Interpret>" + System.getProperty("line.separator"));
            }
        }
        
        super.writeEan(writer);        
        super.writeVeroeffentlicht(writer);
        
        //sprache
        if(!this.tontraeger_art.isEmpty()) {
            writer.write("\t\t\t\t<TontraegerArt>" + this.tontraeger_art + "</TontraegerArt>" + System.getProperty("line.separator"));
        }
        
        //content
        if(!this.tontraeger_anzahl.isEmpty()) {
            writer.write("\t\t\t\t<TontraegerAnzahl>" + this.tontraeger_anzahl + "</TontraegerAnzahl>" + System.getProperty("line.separator"));
        }
        
        writer.write("\t\t\t</Tontraeger>" + System.getProperty("line.separator"));
    }
}
